/* 将后端返回的list集合转换成树形结构 */
export function listToTree(list) {
    const map = {}; // 用于存储节点 id 与节点的映射关系
    const tree = []; // 树的根节点

    // 检查输入是否为数组
    if (!Array.isArray(list)) {
        console.error('listToTree: Expected an array but got', list);
        return tree;
    }

    // 首次遍历，将节点 id 与节点进行映射
    list.forEach(node => {
        map[node.id] = { ...node, children: [] };
    });

    // 第二次遍历，构建树结构
    list.forEach(node => {
        if (node.pid) {
            // 如果存在父级节点，则将当前节点添加到父级节点的子节点列表中
            if (map[node.pid]) {
                map[node.pid].children.push(map[node.id]);
            } else {
                console.error(`Parent node with id ${node.pid} not found`);
            }
        } else {
            // 否则，将当前节点作为根节点
            tree.push(map[node.id]);
        }
    });

    return tree;
}

/* 将树形结构的数据传入函数转换成路由结构 */
export function generateRouter(data) {
    // 检查输入是否为数组
    if (!Array.isArray(data)) {
        console.error('generateRouter: Expected an array but got', data);
        return [];
    }

    let newRoutes = data.map(r => {
        let routes = {
            path: r.path,
            name: r.name,
            meta: { title: r.title },
            component: () => import(`@/views/${r.name}/${r.component}`)
        };
        if (r.children && r.children.length > 0) {
            routes.children = generateRouter(r.children);
        }
        return routes;
    });

    return newRoutes;
}
